package fr.alma.domo.model;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Permet de déclarer  l'attribut d'une ressource.
 * Il n'est autorisé que sur les champs de type {@code String},
 * dont la valeur correspondra au nom de l'attribut que l'on 
 * souhaite déclarer.
 * 
 * @author steg
 *
 */
@Documented
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Property {
	/**
	 * 
	 * @return Le type de l'attribut que l'on souhaite déclarer
	 */
	Class<?> type() default Object.class;
	/**
	 * Si <code>true</code> les tentatives de modification
	 * de l'attribut seront ignorées, peut être utile pour
	 * les attributs dynamiques dont la valeur correspond
	 * à la valeur de retour d'une fonction
	 * @return
	 */
	boolean readonly() default false;
	/**
	 * Si positionné a <code>true</code> sur un attribut
	 * , cette attribut devra garder sa valeur initiale tout
	 * au long de l'execution du service propriétaire, si modifié
	 * celui si pourrait être remplacer par un service qui fournis
	 * les même fonctionnalités
	 * @return
	 */
	boolean fragile() default false;
}
